package com.common.common;

import com.baomidou.mybatisplus.extension.service.IService;
import com.common.common.msg.ResultMsg;
import com.common.common.option.ColumnOption;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 通用Service
 * @param <T> 实体类
 * @param <K> 主键类
 *
 * @author liujun
 * @date 2024/10/10
 */
public interface CommonService<T, K extends Serializable> extends IService<T> {

    /**
     * 保存前校验
     * @param entity 实体
     */
    ResultMsg<Void> saveCheckMsg(T entity);

    /**
     * 保存
     * @param entity 实体
     * @return 是否成功
     */
    ResultMsg<Void> saveMsg(T entity);

    /**
     * 保存
     * @param entityList 实体list
     */
    ResultMsg<Void> saveBatchMsg(Collection<T> entityList);

    /**
     * 更新前校验
     * @param entity 实体
     */
    ResultMsg<Void> updateCheckMsg(T entity);

    /**
     * 更新
     * @param entity 实体
     * @return 是否成功
     */
    ResultMsg<Void> updateMsg(T entity);

    /**
     * 批量更新
     * @param entityList 实体list
     */
    ResultMsg<Void> updateBatchByIdMsg(Collection<T> entityList);

    /**
     * 保存或更新
     * @param entity 实体
     * @return 是否成功
     */
    ResultMsg<Void> saveOrUpdateMsg(T entity);

    /**
     * 删除前校验
     * @param entity 实体
     */
    ResultMsg<Void> removeCheckMsg(T entity);

    /**
     * 删除
     * @param ids 主键
     */
    ResultMsg<Void> removeByIdsMsg(Collection<K> ids);

    void exportExcel(List<T> list, List<ColumnOption> columns, HttpServletResponse response, String sheet) throws IOException;

    ResultMsg<Void> importExcel(MultipartFile file, String sheet, List<ColumnOption> columns) throws IOException;

}
